home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 August: Tool Chest / Dev.CD Aug 94.toast / Tool Chest / Development Platforms / Macintosh Common Lisp Related / interfaces / PInterface Translator / PInterfaces / Memory.p < prev    next >
Encoding:
Text File  |  1993-09-16  |  7.3 KB  |  250 lines  |  [TEXT/MPS ]

  1. {
  2. Created: Sunday, January 6, 1991 at 10:47 PM
  3.     Memory.p
  4.     Pascal Interface to the Macintosh Libraries
  5.  
  6.         Copyright Apple Computer, Inc.    1985-1990
  7.         All rights reserved
  8. }
  9.  
  10.  
  11. {$IFC UNDEFINED UsingIncludes}
  12. {$SETC UsingIncludes := 0}
  13. {$ENDC}
  14.  
  15. {$IFC NOT UsingIncludes}
  16.     UNIT Memory;
  17.     INTERFACE
  18. {$ENDC}
  19.  
  20. {$IFC UNDEFINED UsingMemory}
  21. {$SETC UsingMemory := 1}
  22.  
  23. {$I+}
  24. {$SETC MemoryIncludes := UsingIncludes}
  25. {$SETC UsingIncludes := 1}
  26. {$IFC UNDEFINED UsingTypes}
  27. {$I $$Shell(PInterfaces)Types.p}
  28. {$ENDC}
  29. {$SETC UsingIncludes := MemoryIncludes}
  30.  
  31. CONST
  32. maxSize = $800000;  {Max data block size is 8 megabytes}
  33. defaultPhysicalEntryCount = 8;
  34.  
  35. { values returned from the GetPageState function }
  36. kPageInMemory = 0;
  37. kPageOnDisk = 1;
  38. kNotPaged = 2;
  39.  
  40. TYPE
  41. Size = LONGINT;     { size of a block in bytes }
  42.  
  43. THz = ^Zone;
  44. Zone = RECORD
  45.     bkLim: Ptr;
  46.     purgePtr: Ptr;
  47.     hFstFree: Ptr;
  48.     zcbFree: LONGINT;
  49.     gzProc: ProcPtr;
  50.     moreMast: INTEGER;
  51.     flags: INTEGER;
  52.     cntRel: INTEGER;
  53.     maxRel: INTEGER;
  54.     cntNRel: INTEGER;
  55.     maxNRel: INTEGER;
  56.     cntEmpty: INTEGER;
  57.     cntHandles: INTEGER;
  58.     minCBFree: LONGINT;
  59.     purgeProc: ProcPtr;
  60.     sparePtr: Ptr;
  61.     allocPtr: Ptr;
  62.     heapData: INTEGER;
  63.     END;
  64.  
  65. MemoryBlock = RECORD
  66.     address: Ptr;
  67.     count: LONGINT;
  68.     END;
  69.  
  70. LogicalToPhysicalTable = RECORD
  71.     logical: MemoryBlock;
  72.     physical: ARRAY [0..defaultPhysicalEntryCount - 1] OF MemoryBlock;
  73.     END;
  74.  
  75.  
  76. PageState = INTEGER;
  77. StatusRegisterContents = INTEGER;
  78.  
  79. FUNCTION GetApplLimit: Ptr;
  80.     INLINE $2EB8,$0130;
  81. FUNCTION GetZone: THz;
  82.     INLINE $A11A,$2E88;
  83. FUNCTION SystemZone: THz;
  84.     INLINE $2EB8,$02A6;
  85. FUNCTION ApplicZone: THz;
  86.     INLINE $2EB8,$02AA;
  87. FUNCTION ApplicationZone: THz;
  88.     INLINE $2EB8,$02AA;
  89. FUNCTION NewHandle(byteCount: Size): Handle;
  90. FUNCTION NewHandleSys(byteCount: Size): Handle;
  91. FUNCTION NewHandleClear(byteCount: Size): Handle;
  92. FUNCTION NewHandleSysClear(byteCount: Size): Handle;
  93. FUNCTION HandleZone(h: Handle): THz;
  94. FUNCTION RecoverHandle(p: Ptr): Handle;
  95. FUNCTION NewPtr(byteCount: Size): Ptr;
  96. FUNCTION NewPtrSys(byteCount: Size): Ptr;
  97. FUNCTION NewPtrClear(byteCount: Size): Ptr;
  98. FUNCTION NewPtrSysClear(byteCount: Size): Ptr;
  99. FUNCTION PtrZone(p: Ptr): THz;
  100. FUNCTION GZSaveHnd: Handle;
  101.     INLINE $2EB8,$0328;
  102. FUNCTION TopMem: Ptr;
  103.     INLINE $2EB8,$0108;
  104. FUNCTION MaxBlock: LONGINT;
  105. FUNCTION MaxBlockSys: LONGINT;
  106. FUNCTION StackSpace: LONGINT;
  107. FUNCTION NewEmptyHandle: Handle;
  108. FUNCTION NewEmptyHandleSys: Handle;
  109. PROCEDURE HLock(h: Handle);
  110.     INLINE $205F,$A029;
  111. PROCEDURE HUnlock(h: Handle);
  112.     INLINE $205F,$A02A;
  113. PROCEDURE HPurge(h: Handle);
  114.     INLINE $205F,$A049;
  115. PROCEDURE HNoPurge(h: Handle);
  116.     INLINE $205F,$A04A;
  117. PROCEDURE HLockHi(h: Handle);
  118.     INLINE $205F,$A064,$A029;
  119. FUNCTION StripAddress(theAddress: UNIV Ptr): Ptr;
  120. {$IFC SystemSixOrLater }
  121.     INLINE $201F,$A055,$2E80;;
  122. {$ENDC}
  123. FUNCTION Translate24To32(addr24: UNIV Ptr): Ptr;
  124.     INLINE $201F,$A091,$2E80;
  125. FUNCTION TempNewHandle(logicalSize: Size;VAR resultCode: OSErr): Handle;
  126.     INLINE $3F3C,$001D,$A88F;
  127. FUNCTION TempMaxMem(VAR grow: Size): Size;
  128.     INLINE $3F3C,$0015,$A88F;
  129. FUNCTION TempFreeMem: LONGINT;
  130.     INLINE $3F3C,$0018,$A88F;
  131.  
  132. {  Temporary Memory routines renamed, but obsolete, in System 7.0 and later.  }
  133. PROCEDURE TempHLock(h: Handle;VAR resultCode: OSErr);
  134.     INLINE $3F3C,$001E,$A88F;
  135. PROCEDURE TempHUnlock(h: Handle;VAR resultCode: OSErr);
  136.     INLINE $3F3C,$001F,$A88F;
  137. PROCEDURE TempDisposeHandle(h: Handle;VAR resultCode: OSErr);
  138.     INLINE $3F3C,$0020,$A88F;
  139. FUNCTION TempTopMem: Ptr;
  140.     INLINE $3F3C,$0016,$A88F;
  141.  
  142. {  Temporary Memory routines as they were known before System 7.0.  }
  143. FUNCTION MFMaxMem(VAR grow: Size): Size;
  144.     INLINE $3F3C,$0015,$A88F;
  145. FUNCTION MFFreeMem: LONGINT;
  146.     INLINE $3F3C,$0018,$A88F;
  147. FUNCTION MFTempNewHandle(logicalSize: Size;VAR resultCode: OSErr): Handle;
  148.     INLINE $3F3C,$001D,$A88F;
  149. PROCEDURE MFTempHLock(h: Handle;VAR resultCode: OSErr);
  150.     INLINE $3F3C,$001E,$A88F;
  151. PROCEDURE MFTempHUnlock(h: Handle;VAR resultCode: OSErr);
  152.     INLINE $3F3C,$001F,$A88F;
  153. PROCEDURE MFTempDisposHandle(h: Handle;VAR resultCode: OSErr);
  154.     INLINE $3F3C,$0020,$A88F;
  155. FUNCTION MFTopMem: Ptr;
  156.     INLINE $3F3C,$0016,$A88F;
  157. PROCEDURE InitApplZone;
  158.     INLINE $A02C;
  159. PROCEDURE InitZone(pgrowZone: ProcPtr;cmoreMasters: INTEGER;limitPtr: UNIV Ptr;
  160.     startPtr: UNIV Ptr);
  161. PROCEDURE SetZone(hz: THz);
  162.     INLINE $205F,$A01B;
  163. FUNCTION CompactMem(cbNeeded: Size): Size;
  164. FUNCTION CompactMemSys(cbNeeded: Size): Size;
  165. PROCEDURE PurgeMem(cbNeeded: Size);
  166.     INLINE $201F,$A04D;
  167. PROCEDURE PurgeMemSys(cbNeeded: Size);
  168.     INLINE $201F,$A44D;
  169. FUNCTION FreeMem: LONGINT;
  170.     INLINE $A01C,$2E80;
  171. FUNCTION FreeMemSys: LONGINT;
  172.     INLINE $A41C,$2E80;
  173. PROCEDURE ResrvMem(cbNeeded: Size);
  174.     INLINE $201F,$A040;
  175. PROCEDURE ReserveMem(cbNeeded: Size);
  176.     INLINE $201F,$A040;
  177. PROCEDURE ReserveMemSys(cbNeeded: Size);
  178.     INLINE $201F,$A440;
  179. FUNCTION MaxMem(VAR grow: Size): Size;
  180. FUNCTION MaxMemSys(VAR grow: Size): Size;
  181. PROCEDURE SetGrowZone(growZone: ProcPtr);
  182.     INLINE $205F,$A04B;
  183. PROCEDURE SetApplLimit(zoneLimit: UNIV Ptr);
  184.     INLINE $205F,$A02D;
  185. PROCEDURE MoveHHi(h: Handle);
  186.     INLINE $205F,$A064;
  187. PROCEDURE DisposPtr(p: Ptr);
  188.     INLINE $205F,$A01F;
  189. PROCEDURE DisposePtr(p: Ptr);
  190.     INLINE $205F,$A01F;
  191. FUNCTION GetPtrSize(p: Ptr): Size;
  192. PROCEDURE SetPtrSize(p: Ptr;newSize: Size);
  193. PROCEDURE DisposHandle(h: Handle);
  194.     INLINE $205F,$A023;
  195. PROCEDURE DisposeHandle(h: Handle);
  196.     INLINE $205F,$A023;
  197. FUNCTION GetHandleSize(h: Handle): Size;
  198. PROCEDURE SetHandleSize(h: Handle;newSize: Size);
  199. PROCEDURE EmptyHandle(h: Handle);
  200.     INLINE $205F,$A02B;
  201. PROCEDURE ReallocHandle(h: Handle;byteCount: Size);
  202. PROCEDURE ReallocateHandle(h: Handle;byteCount: Size);
  203. PROCEDURE HSetRBit(h: Handle);
  204.     INLINE $205F,$A067;
  205. PROCEDURE HClrRBit(h: Handle);
  206.     INLINE $205F,$A068;
  207. PROCEDURE MoreMasters;
  208.     INLINE $A036;
  209. PROCEDURE BlockMove(srcPtr: UNIV Ptr;destPtr: UNIV Ptr;byteCount: Size);
  210. FUNCTION MemError: OSErr;
  211.     INLINE $3EB8,$0220;
  212. PROCEDURE PurgeSpace(VAR total: LONGINT;VAR contig: LONGINT);
  213. FUNCTION HGetState(h: Handle): SignedByte;
  214. PROCEDURE HSetState(h: Handle;flags: SignedByte);
  215. PROCEDURE SetApplBase(startPtr: UNIV Ptr);
  216.     INLINE $205F,$A057;
  217. PROCEDURE MaxApplZone;
  218.     INLINE $A063;
  219. FUNCTION HoldMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  220. FUNCTION UnholdMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  221. FUNCTION LockMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  222. FUNCTION LockMemoryContiguous(address: UNIV Ptr;count: LONGINT): OSErr;
  223. FUNCTION UnlockMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  224. FUNCTION GetPhysical(VAR addresses: LogicalToPhysicalTable;VAR physicalEntryCount: LONGINT): OSErr;
  225. FUNCTION DeferUserFn(userFunction: ProcPtr;argument: UNIV Ptr): OSErr;
  226. FUNCTION DebuggerGetMax: LONGINT;
  227.     INLINE $7000,$A08D,$2E80;
  228. PROCEDURE DebuggerEnter;
  229.     INLINE $7001,$A08D;
  230. PROCEDURE DebuggerExit;
  231.     INLINE $7002,$A08D;
  232. PROCEDURE DebuggerPoll;
  233.     INLINE $7003,$A08D;
  234. FUNCTION GetPageState(address: UNIV Ptr): PageState;
  235.     INLINE $205F,$7004,$A08D,$3E80;
  236. FUNCTION PageFaultFatal: BOOLEAN;
  237.     INLINE $7005,$A08D,$1E80;
  238. FUNCTION DebuggerLockMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  239. FUNCTION DebuggerUnlockMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  240. FUNCTION EnterSupervisorMode: StatusRegisterContents;
  241.     INLINE $7008,$A08D,$3E80;
  242.  
  243.  
  244. {$ENDC}    { UsingMemory }
  245.  
  246. {$IFC NOT UsingIncludes}
  247.     END.
  248. {$ENDC}
  249.  
  250.